/**
 * 管理员控制器类，负责处理与管理员相关的请求。
 */
import AdminService from "../service/AdminService";
import { Request, Response } from "express";

class AdminController {
    /**
     * 获取所有管理员信息。
     * @param req 请求对象，不包含特定参数。
     * @param res 响应对象，用于发送查询结果。
     */
    async getAllAdmin(req: Request, res: Response) {
        const data = await AdminService.getAllAdmin();
        res.send(data);
    }
    /**
     * 处理管理员登录请求。
     * @param req 请求对象，包含登录信息（用户名和密码）。
     * @param res 响应对象，用于发送登录结果。
     */
    async login(req: Request, res: Response) {
        const admin = req.body;
        const uid = req.query.uid as string;
        console.log(admin, uid);
        const data = await AdminService.login(admin, uid);
        res.send(data);
    }
    /**
     * 处理管理员注册请求。
     * @param req 请求对象，包含待注册管理员的信息。
     * @param res 响应对象，用于发送注册结果。
     */
    async register(req: Request, res: Response) {
        const admin = req.body;
        const data = await AdminService.register(admin);
        res.send(data);
    }
    /**
     * 通过刷新令牌获取新的访问令牌。
     * @param req 请求对象，包含刷新令牌。
     * @param res 响应对象，用于发送新的访问令牌。
     */
    async getToken(req: Request, res: Response) {
        const refreshToken = req.query.refreshToken;
        const data = await AdminService.getToken(refreshToken as string);
        res.send(data);
    }
    /**
     * 发送验证邮件。
     * @param req 请求对象，包含待发送邮件的地址和名称。
     * @param res 响应对象，用于发送发送结果。
     */
    async sendEmail(req: Request, res: Response) {
        const email = req.query.email as string;
        const name = req.query.name as string;
        const data = await AdminService.sendEmail(email, name);
        res.send(data);
    }
    /**
     * 发送验证码。
     * @param req 请求对象，路径中包含验证码ID。
     * @param res 响应对象，用于发送验证码图片。
     */
    async sendCaptcha(req: Request, res: Response) {
        const codeId = req.path.split("/")[3];
        const data = await AdminService.sendCaptcha(codeId);
        res.setHeader("Content-Type", "image/svg+xml");
        res.send(data);
    }
}
export default new AdminController();
